<script charset="utf-8">

    let xiaoming={
        name:"小明",
        age:18,
        hobby:{
            boll:["篮球","足球","排球"],
            eat:{
                eggs:["鸡蛋","鸭蛋"]
            }
        },
        arr:[1,2,3]
    }


    let  arr=["a","b",[3,4]]


    function deepcopy(obj){
        // obj  可能是数组也可能是对象

        // newobj去接收obj里面的每一项值
        // 需要确定newobj是数组还是对象
        // let  newobj=Object.prototype.toString.call(obj)=="[object Object]"?{}:[]
        
        let  newobj;
        if(Object.prototype.toString.call(obj)=="[object Object]"){
            newobj={}
        }else{
            newobj=[]
        }


        // 一个一个的拿到obj的数据
        for(let k in  obj){
            // console.log(k);
            // console.log(obj[k]);//小明  18  {boll: Array(3), eat: {…}}
            // 小明 18  可以直接复制过去
            // {boll: Array(3), eat: {…}}  不行

            // 判断是简单数据类型还是复杂数据类型
            if(typeof obj[k]=="object"){
                // console.log(obj[k],1111111111);

                // newobj[k]=obj[k]    ///假设此时已经解决好递归问题 
                newobj[k]= deepcopy(obj[k])    //如果是复杂数据类型，需要重新执行一次深拷贝的过程 



            }else{
                // console.log(obj[k],2222222);

                // 简单数据类型可以直接复制过去
                newobj[k]=obj[k]
            }
        }

        // 结果需要返回出来
        return newobj
    }



    // deepcopy([1,2,3])
    let newobj=deepcopy(xiaoming)
    // let newobj=deepcopy(arr)
    console.log(newobj);

    // 测试
    newobj.arr.push(4)
    newobj.hobby.eat.eggs.push("鹅蛋")
    console.log(newobj);
    console.log(xiaoming);






    // console.log(typeof [1,2,3]);
    // console.log(typeof {name:"zs"});

    // console.log(Object.prototype.toString.call([1,2,3]));//[object Array]
    // console.log(Object.prototype.toString.call({name:"zs"}));//[object Object]







</script>